class Usuarios::Jogador < ActiveRecord::Base
  
  set_table_name "jogadores"
  
  attr_accessor :confirmacaoSenha
  
  validates_presence_of :nome
  validates_presence_of :login
  validates_presence_of :senha
  validates_presence_of :email
  validates_length_of :senha, :minimum => 6
  validates_uniqueness_of :login
  validates_uniqueness_of :email
  validate :confirmacaoDeSenha
  validate :emailForma
  
  before_save :criptografarSenha
  
  def after_find
    if self.attribute_present?("senha")
      self.confirmacaoSenha = self.senha
      @senhaAntiga = self.senha
    end
  end
  
  def criptografarSenha
    if self.senha != @senhaAntiga
      self.senha = Digest::MD5.hexdigest(self.senha)
    end
  end
  
  # Metodos de Validações
  
  def confirmacaoDeSenha
    if self.senha == self.confirmacaoSenha
      return true
    else
      errors.add(:confirmacaoSenha, "Por favor, reveja a confirmação de senha.")
    end
  end
  
  def emailForma
    if self.email =~ /.+@.+\..+/
      return true
    else
      errors.add(:email, "Por favor, utilize um e-mail válido")
    end
  end
  
  # Metodos de classe
  
  def self.buscarJogadores(*parametros)
    Usuarios::Jogador.find(*parametros)
  end
  
  def self.zerarPontuacoesMensais
    Usuarios::Jogador.update_all("pontuacaoMensal = 0")
  end
  
  # Metodos de objetos
  
  def validarDados
    self.valid?
  end
  
  def validarLogin(senhaUsuario)
    self.senha == Digest::MD5.hexdigest(senhaUsuario)
  end
  
  def criar
    self.save
  end
  
  def atualizar(parametros)
    self.attributes = parametros
    self.save
  end
  
  def remover
    self.delete
  end
  
  def incrementarVitorias
    self.vitorias += 1
    self.save
  end
  
  def incrementarPontuacao(pontos)
    self.pontuacaoMensal += pontos
    self.save
  end
  
  def calcularPosicao
    Usuarios::Jogador.count(:conditions => ["pontuacaoMensal > ?", self.pontuacaoMensal]) + 1
  end
  
end
